Page({
  data: {
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    canIUseGetUserProfile: false,
    canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName'),
    functionList: [
      { id: 'members', name: '家庭成员管理', icon: '/images/icon-members.png', url: '/pages/members/members' },
      { id: 'reminders', name: '健康提醒', icon: '/images/icon-reminder.png', url: '/pages/reminders/reminders' },
      { id: 'reports', name: '健康报告', icon: '/images/icon-report.png', url: '/pages/reports/reports' },
      { id: 'knowledge', name: '健康知识', icon: '/images/icon-knowledge.png', url: '/pages/knowledge/knowledge' }
    ],
    settingList: [
      { id: 'account', name: '账号设置', icon: '/images/icon-account.png' },
      { id: 'notification', name: '通知设置', icon: '/images/icon-notification.png' },
      { id: 'privacy', name: '隐私设置', icon: '/images/icon-privacy.png' },
      { id: 'about', name: '关于我们', icon: '/images/icon-about.png' }
    ],
    isLoggedIn: false,
    loginUserInfo: null
  },

  onLoad() {
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      })
    }
    
    // 检查是否有缓存的用户信息
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.setData({
        userInfo: userInfo,
        hasUserInfo: true
      });
    }
    
    this.checkLoginStatus();
  },
  
  onShow() {
    // 每次进入页面时检查登录状态
    this.checkLoginStatus();
  },
  
  checkLoginStatus() {
    // 检查登录状态
    const token = wx.getStorageSync('token');
    const loginUserInfo = wx.getStorageSync('userInfo');
    
    if (token && loginUserInfo) {
      this.setData({
        isLoggedIn: true,
        loginUserInfo: loginUserInfo
      });
      
      // 从服务器获取最新的用户信息
      this.fetchUserInfo(token);
    } else {
      this.setData({
        isLoggedIn: false,
        loginUserInfo: null
      });
    }
  },
  
  // 从服务器获取最新用户信息
  fetchUserInfo(token) {
    wx.request({
      url: 'http://localhost:3000/api/users/profile',
      method: 'GET',
      header: {
        'Authorization': `Bearer ${token}`
      },
      success: (res) => {
        if (res.data && res.data.success && res.data.data && res.data.data.user) {
          const serverUserInfo = res.data.data.user;
          
          // 更新本地存储的用户信息
          const currentUserInfo = wx.getStorageSync('userInfo') || {};
          const updatedUserInfo = {
            ...currentUserInfo,
            id: serverUserInfo.id,
            username: serverUserInfo.username,
            nickname: serverUserInfo.nickname,
            avatar: serverUserInfo.avatar,
            gender: serverUserInfo.gender,
            phone: serverUserInfo.phone,
            email: serverUserInfo.email
          };
          
          // 保存到本地存储
          wx.setStorageSync('userInfo', updatedUserInfo);
          
          // 更新页面显示
          this.setData({
            loginUserInfo: updatedUserInfo
          });
        }
      },
      fail: (err) => {
        console.error('获取用户信息失败:', err);
      }
    });
  },

  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息，开发者每次通过该接口获取用户个人信息均需用户确认
    // 开发者妥善保管用户快速填写的头像昵称，避免重复弹窗
    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途，后续会展示在弹窗中
      success: (res) => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        });
        
        // 缓存用户信息
        wx.setStorageSync('userInfo', res.userInfo);
      }
    })
  },

  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息，预计自2021年4月13日起，getUserInfo将不再弹出弹窗，并直接返回匿名的用户个人信息
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    });
    
    // 缓存用户信息
    if (e.detail.userInfo) {
      wx.setStorageSync('userInfo', e.detail.userInfo);
    }
  },

  navigateTo(e) {
    const url = e.currentTarget.dataset.url;
    console.log('导航到:', url);
    
    if (url) {
      // 使用switchTab处理tabBar页面，使用navigateTo处理非tabBar页面
      if (url === '/pages/members/members' || 
          url === '/pages/records/records' || 
          url === '/pages/index/index' || 
          url === '/pages/profile/profile') {
        wx.switchTab({
          url: url,
          fail: (err) => {
            console.error('切换标签页失败:', err);
            wx.showToast({
              title: '页面跳转失败',
              icon: 'none'
            });
          }
        });
      } else {
        wx.navigateTo({
          url: url,
          fail: (err) => {
            console.error('页面导航失败:', err);
            wx.showToast({
              title: '页面跳转失败',
              icon: 'none'
            });
          }
        });
      }
    } else {
      wx.showToast({
        title: '功能开发中',
        icon: 'none'
      });
    }
  },

  showSettings(e) {
    const id = e.currentTarget.dataset.id;
    if (id === 'reports') {
      wx.showToast({
        title: '健康报告功能开发中',
        icon: 'none',
        duration: 2000
      });
    } else {
      wx.showToast({
        title: '设置功能开发中',
        icon: 'none'
      });
    }
  },

  contactService() {
    wx.showToast({
      title: '客服功能开发中',
      icon: 'none'
    });
  },

  feedback() {
    wx.showToast({
      title: '反馈功能开发中',
      icon: 'none'
    });
  },
  
  // 处理头像点击
  handleAvatarClick() {
    // 确保用户已登录
    if (!this.data.isLoggedIn) {
      wx.navigateTo({
        url: '/pages/login/login'
      });
      return;
    }
    
    // 显示操作菜单
    wx.showActionSheet({
      itemList: ['更换头像', '查看头像'],
      success: (res) => {
        if (res.tapIndex === 0) {
          // 选择更换头像
          this.chooseProfileAvatar();
        } else if (res.tapIndex === 1) {
          // 查看头像
          this.previewAvatar();
        }
      }
    });
  },
  
  // 选择新头像
  chooseProfileAvatar() {
    // 确保用户已登录
    if (!this.data.isLoggedIn) {
      wx.navigateTo({
        url: '/pages/login/login'
      });
      return;
    }
    
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const avatarUrl = res.tempFilePaths[0];
        
        // 显示加载提示
        wx.showLoading({
          title: '上传中...',
          mask: true
        });
        
        // 先将图片上传到服务器
        this.uploadAvatar(avatarUrl).then(serverAvatarUrl => {
          // 更新用户信息中的头像
          const userInfo = wx.getStorageSync('userInfo');
          if (userInfo) {
            userInfo.avatar = serverAvatarUrl;
            wx.setStorageSync('userInfo', userInfo);
            
            // 更新页面显示
            this.setData({
              loginUserInfo: userInfo
            });
            
            wx.hideLoading();
            wx.showToast({
              title: '头像已更新',
              icon: 'success'
            });
          }
        }).catch(error => {
          wx.hideLoading();
          wx.showToast({
            title: '头像上传失败',
            icon: 'none'
          });
          console.error('头像上传失败:', error);
        });
      }
    });
  },
  
  // 上传头像到服务器
  uploadAvatar(filePath) {
    return new Promise((resolve, reject) => {
      const token = wx.getStorageSync('token');
      if (!token) {
        reject(new Error('未登录'));
        return;
      }
      
      // 先上传文件到服务器
      wx.uploadFile({
        url: 'http://localhost:3000/api/upload/avatar',
        filePath: filePath,
        name: 'avatar',
        header: {
          'Authorization': `Bearer ${token}`
        },
        success: (uploadRes) => {
          try {
            const data = JSON.parse(uploadRes.data);
            if (data.success && data.data && data.data.url) {
              // 获取上传后的URL
              const serverAvatarUrl = data.data.url;
              
              // 然后调用更新用户信息的API
              wx.request({
                url: 'http://localhost:3000/api/users/profile',
                method: 'PUT',
                header: {
                  'Authorization': `Bearer ${token}`,
                  'Content-Type': 'application/json'
                },
                data: {
                  avatar: serverAvatarUrl
                },
                success: (updateRes) => {
                  if (updateRes.data.success) {
                    resolve(serverAvatarUrl);
                  } else {
                    console.error('更新用户头像失败:', updateRes.data.message);
                    reject(new Error(updateRes.data.message || '更新用户头像失败'));
                  }
                },
                fail: (err) => {
                  console.error('更新用户头像请求失败:', err);
                  reject(err);
                }
              });
            } else {
              reject(new Error(data.message || '上传失败'));
            }
          } catch (e) {
            console.error('解析上传响应失败:', e);
            reject(e);
          }
        },
        fail: (err) => {
          console.error('上传头像失败:', err);
          reject(err);
        }
      });
    });
  },
  
  // 预览头像
  previewAvatar() {
    const avatarUrl = this.data.loginUserInfo?.avatar;
    if (avatarUrl) {
      wx.previewImage({
        urls: [avatarUrl],
        current: avatarUrl
      });
    }
  },
  
  logout() {
    wx.showModal({
      title: '退出登录',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除登录信息
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          
          // 清除其他可能的缓存数据
          wx.removeStorageSync('members');
          wx.removeStorageSync('selectedMember');
          wx.removeStorageSync('healthData');
          
          // 更新状态
          this.setData({
            isLoggedIn: false,
            loginUserInfo: null
          });
          
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          });
          
          // 跳转到登录页面
          wx.redirectTo({
            url: '/pages/login/login'
          });
        }
      }
    });
  }
}) 